﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Gacn.ControleAlunos.Library.Entities;
using Gacn.ControleAlunos.Library.Business;
using System.Text;

namespace Gacn.ControleAlunos.WebApplication
{
    public partial class CadastraAluno : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            LoadCboTurma();
        }

        protected void cadastrar_Click(object sender, EventArgs e)
        {
            PessoaDetalhadaEntity pessoa = ValidaDadosDaTela();

            if (pessoa != null){
                try
                {
                    InsereNoBanco(pessoa);
                    LimpaDadosNaTela();
                }
                catch (Exception ex)
                {
                    StringBuilder sb = new StringBuilder();

                    sb.AppendLine("Houve falha na inserção dos dados.");
                    sb.AppendLine("\n");
                    sb.AppendLine(ex.Message);
                    sb.AppendLine(ex.StackTrace);
                    sb.AppendLine(ex.Data.ToString());

                    txtResultado.Visible = true;
                    txtResultado.Text = sb.ToString();
                }
            }
        }

        private void InsereNoBanco(PessoaDetalhadaEntity pessoa)
        {
            PessoaBiz.CadastraPessoa(pessoa);
            if (pessoa.ID > 0)
            {
                AlunoBiz.MatriculaAluno(
                    (int)pessoa.ID,
                    int.Parse(cboTurma.SelectedValue.ToString()),
                    alunoObs.Text,
                    2);

                LimpaDadosNaTela();
            }
        }

        private PessoaDetalhadaEntity ValidaDadosDaTela()
        {
            txtResultado.Text = "";

            if (alunoNomeCompleto.Text.Equals("") || 
                cboTurma.SelectedIndex.Equals(0)  ||
                cboSexo.SelectedIndex.Equals(0))
            {
                txtResultado.Text = "Verifique se os dados obrigatórios estão preenchidos.";
                txtResultado.Visible = true;
                return null;
            }
            try
            {
                PessoaDetalhadaEntity pessoa = new PessoaDetalhadaEntity();
                if (!alunoIdade.Text.Equals(""))
                    pessoa.Nascimento = DateTime.Today - 
                        new TimeSpan(int.Parse(alunoIdade.Text.ToString()) * 365, 0, 0, 0);

                if (!telAluno1.Text.Equals(""))
                    pessoa.Telefone = double.Parse(telAluno1.Text);
                if (!telAluno2.Text.Equals(""))
                    pessoa.Telefone2 = double.Parse(telAluno2.Text);
                if (!alunoRA.Text.Equals(""))
                    pessoa.RA = double.Parse(alunoRA.Text);
                if (!alunoSapato.Text.Equals(""))
                    pessoa.NumeroSapato = int.Parse(alunoSapato.Text);

                pessoa.Serie = alunoSerie.Text;
                pessoa.RoupaBaixo = alunoCalca.Text;
                pessoa.RoupaCima = alunoCamisa.Text;
                pessoa.NomePessoa = alunoNomeCompleto.Text;
                pessoa.Observacao = alunoObs.Text;
                pessoa.Sexo = char.Parse(cboSexo.SelectedValue);
                pessoa.TipoPessoaId = 1;
                pessoa.Ativo = true;

                return pessoa;
            }
            catch (Exception ex)
            {
                StringBuilder sb = new StringBuilder();

                sb.AppendLine("Houve falha na validação dos dados. Verifique abaixo a formatação correta:");
                sb.AppendLine("- Sapato, Idade, RA e Telefones: Apenas números");
                sb.AppendLine("\n");
                sb.AppendLine(ex.Message);
                sb.AppendLine(ex.StackTrace);
                sb.AppendLine(ex.Data.ToString());

                txtResultado.Visible = true;
                txtResultado.Text = sb.ToString();
                return null;
            }
        }

        private void LimpaDadosNaTela()
        {
            throwErrorToUser.InnerText = "";
            alunoCalca.Text = "";
            alunoCamisa.Text = "";
            alunoIdade.Text = "";
            alunoNomeCompleto.Text = "";
            alunoObs.Text = "";
            alunoRA.Text = "";
            alunoSapato.Text = "";
            telAluno1.Text = "";
            telAluno2.Text = "";
            alunoSerie.Text = "";
            cboSexo.SelectedIndex = 0;
            cboTurma.SelectedIndex = 0;
            lblSucesso.InnerText = "Aluno cadastrado com sucesso.";
            txtResultado.Visible = false;
        }

        private void LoadCboTurma()
        {
            List<TurmaEntity> turmas = TurmaBiz.GetAllTurmaEntity();
            foreach (TurmaEntity t in turmas)
                cboTurma.Items.Add(new ListItem(t.CodTurma.ToString(), t.ID.ToString()));
        }

    }
}